以下筆記摘錄自『 The Go Workshop 』。
我們時常呼叫某個函式,但只會拿函式的回傳值來檢查它是否正確執行,之後就再也不需要這個值了。比方說寫入檔案、將資料存入資料庫等等,只是想確認動作執行完畢後有沒有發生問題。
這種情況下,函式傳回的變數後面就用不到了,但只要你接收它,那這些資料就會存在其作用範圍內,等於是多佔了一份記憶體。為了避免放費,可以把變數的作用範圍限制在if敘述範圍,這樣只要離開if敘述,該變數就會消滅。
If <起始賦值敘述>; <布林值運算式> {
<程式區塊>
}
注意Go語言只允許在<起始賦值敘述>使用以下簡單的敘述:
i := 0
i :=(j * 10) == 40
i++
最常犯得錯誤就是企圖在起始賦值敘述用var定義變數,這是不允許的,只能在這裡使用短變數宣告。
For example,
package main
import (
"errors"
"fmt"
)
func validate(input int) error {
if input < 0 {
return errors.New("輸入值不得為負")
} else if input > 100 {
return errors.New("輸入值不得超過 100")
} else if input%7 == 0 {
return errors.New("輸入值不得為 7 的倍數")
} else {
return nil
}
}
func main() {
input := 21
if err := validate(input); err != nil {
fmt.Println(err)
} else if input%2 == 0 {
fmt.Println(input, "是偶數")
} else {
fmt.Println(input, "是奇數")
}
}
//output
輸入值不得為 7 的倍數
使用起始賦值敘述定義一個變數err,並對他賦值,然後將這個變數拿來用在if敘述的布林值運算中,只要main()的if...else if...else完成任務後,err變數就會離開作用範圍,被Go語言的記憶體管理系統回收。